package br.projecao.laboratorio.dao;

import br.projecao.laboratorio.negocio.Aluno;
import br.projecao.laboratorio.negocio.Projeto;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Desenvolvimento
 */
public class ProjetoDAO extends DAO {

    public ProjetoDAO() {
    }

    public void incluir(Projeto projeto) throws SQLException {
        String inserir = "INSERT INTO lab_projeto ( nome,url,data_inicio,data_fim) value ( ?,?,?,?) ";
        try {
            abreConexao();
            PreparedStatement pst = conexao.prepareStatement(inserir);
            pst.setString(1, projeto.getNome());
            pst.setString(2, projeto.getUrl());
            pst.setDate(3, new java.sql.Date(projeto.getDataInicio().getTime()));
            pst.setDate(4, new java.sql.Date(projeto.getDataFim().getTime()));
            pst.execute();
        } catch (SQLException e) {
            throw e;
        } finally {
            fechaConexao();
        }
    }

    public void alterar(Projeto projeto) throws SQLException {
        StringBuilder sql = new StringBuilder("UPDATE lab_projeto set");
        sql.append(" nome=?, ");
        sql.append(" url=?, ");
        sql.append(" data_inicio=?, ");
        sql.append(" data_fim = ? ");
        sql.append(" where idProjeto = ?");
        try {
            abreConexao();
            PreparedStatement pst = conexao.prepareStatement(sql.toString());
            pst.setString(1, projeto.getNome());
            pst.setString(2, projeto.getUrl());
            pst.setDate(3, new java.sql.Date(projeto.getDataInicio().getTime()));
            pst.setDate(4, new java.sql.Date(projeto.getDataFim().getTime()));
            pst.setInt(5, projeto.getIdProjeto());
            pst.execute();
        } catch (SQLException e) {
            throw e;
        } finally {
            fechaConexao();
        }
    }

    public void excluir(Projeto projeto) throws SQLException {
        StringBuilder sql = new StringBuilder("DELETE FROM lab_projeto");
        sql.append(" WHERE ");
        sql.append(" idprojeto=?");
        try {
            abreConexao();
            PreparedStatement pst = conexao.prepareStatement(sql.toString());
            pst.setInt(1, projeto.getIdProjeto());
            pst.execute();
        } catch (SQLException e) {
            throw e;
        } finally {
            fechaConexao();
        }
    }

    public ArrayList<Projeto> ListarProjetos(Projeto projeto) throws SQLException {
        ArrayList<Projeto> retorno = new ArrayList<Projeto>();
        String sql = "select idprojeto, nome, url, data_inicio, data_fim from lab_projeto ";
        try {
            abreConexao();
            PreparedStatement pst = conexao.prepareStatement(sql);
            ResultSet Set = pst.executeQuery();
            while (Set.next()) {
                projeto = new Projeto();
                projeto.setIdProjeto(Set.getInt("idprojeto"));
                projeto.setNome(Set.getString("nome"));
                projeto.setUrl(Set.getString("url"));
                projeto.setDataInicio(Set.getDate("data_inicio"));
                projeto.setDataFim(Set.getDate("data_fim"));
                retorno.add(projeto);
            }
        } catch (SQLException e) {
            throw e;
        } finally {
            fechaConexao();
        }
        return retorno;
    }

    public ArrayList<Projeto> consultarProjeto(Projeto projeto) throws SQLException {
        ArrayList<Projeto> pro = new ArrayList<Projeto>();
        if (projeto.getIdProjeto() != null) {
            pro.add(consultarProjetoPorCodigo(projeto));
            return pro;
        }
        String sql = "select idprojeto, nome, url, data_inicio, data_fim from lab_projeto where nome like ? ";
        try {
            abreConexao();
            PreparedStatement pst = conexao.prepareStatement(sql);
            if (projeto.getNome() != null) {
                pst.setString(1, "%" + projeto.getNome() + "%");
            }
            ResultSet Set = pst.executeQuery();
            while (Set.next()) {
                projeto = new Projeto();
                projeto.setIdProjeto(Set.getInt("idprojeto"));
                projeto.setNome(Set.getString("nome"));
                projeto.setUrl(Set.getString("url"));
                projeto.setDataInicio(Set.getDate("data_inicio"));
                projeto.setDataFim(Set.getDate("data_fim"));
                pro.add(projeto);
            }
        } catch (SQLException e) {

            throw e;
        } finally {
            fechaConexao();
        }
        return pro;
    }

    public Projeto consultarProjetoPorCodigo(Projeto projeto) throws SQLException {
        String sql = "select idprojeto, nome, url, data_inicio, data_fim from lab_projeto where idProjeto = ? ";
        try {
            abreConexao();
            PreparedStatement pst = conexao.prepareStatement(sql);
            pst.setInt(1, projeto.getIdProjeto());
            ResultSet Set = pst.executeQuery();
            while (Set.next()) {
                projeto = new Projeto();
                projeto.setIdProjeto(Set.getInt("idprojeto"));
                projeto.setNome(Set.getString("nome"));
                projeto.setUrl(Set.getString("url"));
                projeto.setDataInicio(Set.getDate("data_inicio"));
                projeto.setDataFim(Set.getDate("data_fim"));
            }
        } catch (SQLException e) {

            throw e;
        } finally {
            fechaConexao();
        }
        return projeto;
    }

    public void incluirAluno(Integer matricula, Integer idProjeto) throws SQLException {
        String inserir = "INSERT INTO lab_aluno_lab_projeto ( matricula, idprojeto) value (?,?) ";
        try {
            abreConexao();
            PreparedStatement pst = conexao.prepareStatement(inserir);
            pst.setInt(1, matricula);
            pst.setInt(2, idProjeto);
            pst.execute();
        } catch (SQLException e) {
            throw e;
        } finally {
            fechaConexao();
        }
    }

    public ArrayList<Aluno> consultarAlunos(Projeto projeto) throws SQLException {
        StringBuilder sql = new StringBuilder("SELECT a.matricula,email,senha,nome,telefone,celular ");
        sql.append(" FROM lab_aluno a inner join lab_aluno_lab_projeto p ");
        sql.append(" on a.matricula = p.matricula ");
        sql.append(" where p.idprojeto = ?");
        sql.append(" order by nome");
        ArrayList<Aluno> alunos = new ArrayList<Aluno>();
        try {
            abreConexao();
            PreparedStatement pstm = conexao.prepareStatement(sql.toString());
            pstm.setInt(1, projeto.getIdProjeto());
            ResultSet rs = pstm.executeQuery();
            while (rs.next()) {
                Aluno aluno = new Aluno();
                aluno.setMatricula(rs.getInt("matricula"));
                aluno.setEmail(rs.getString("email"));
                aluno.setSenha(rs.getString("senha"));
                aluno.setNome(rs.getString("nome"));
                aluno.setTelefone(rs.getString("telefone"));
                aluno.setCelular(rs.getString("celular"));
                alunos.add(aluno);
            }
        } catch (SQLException e) {
            throw e;
        } finally {
            fechaConexao();
        }
        return alunos;
    }
}
